﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using AvalonDock;
using CADs;
using ModeloGaleriaNET;
using SeguridadGaleria;

namespace GaleriaNET
{
    /// <summary>
    /// Lógica de interacción para ucClientData.xaml
    /// </summary>
    public partial class ucClientData : UserControl
    {
        private string[] permisos = new string[] { TiposRoles.CREAR_CLIENTE, TiposRoles.MODIFICAR_DATOS_CLIENTE,
            TiposRoles.ELIMINAR_CLIENTE};
        private bool success;
        private bool loaded;
        private ClienteCAD cCAD;
        private Cliente cliente;
        private readonly string title;
        private Brush brushNormal;
        private string originalDNICIF;
        private string originalNombre;
        private string originalAp1;
        private string originalAp2;
        private string originalNombreEmpresa;
        private string originalDireccion;
        private string originalTelefono;
        private string originalMail;
        private string originalPoblacion;
        private string originalCPostal;
        private string originalProvincia;
        private int originalPais;
        private BackgroundWorker worker;
        private Dictionary<string, bool> permisosDatos;
        private string usuario;
        private IAuditoria auditoria;

        public ucClientData(string u)
        {
            InitializeComponent();
            loaded = false;
            lbTitulo.Content = title = "Creación de nuevo cliente";
            cliente = null;
            worker = new BackgroundWorker();
            worker.DoWork += worker_DoWork;
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;
            usuario = u;
            auditoria = new AuditoriaBD();
        }

        public string Title
        {
            get { return title; }
        }

        public ucClientData(Cliente c, string u)
        {
            InitializeComponent();
            loaded = false;
            lbTitulo.Content = title = "Datos de " + c.Nombre + " " + c.Apellido1;
            cliente = c;
            worker = new BackgroundWorker();
            worker.DoWork += worker_DoWork;
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;
            usuario = u;
            auditoria = new AuditoriaBD();
        }

        private void ClosingDocument(object sender, CancelEventArgs e)
        {
            if (!success)
            {
                if (HasChanges())
                {
                    if (Xceed.Wpf.Toolkit.MessageBox.Show("¿Desea salir sin aplicar los cambios?", "Salir",
                        MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No)
                        e.Cancel = true;
                }
            }
        }

        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            bool? value;

            permisosDatos = new Dictionary<string, bool>();
            foreach (string s in permisos)
            {
                value = ManejadorRoles.Instance.CanUse(s, usuario);
                if (value != null)
                    permisosDatos.Add(s, value.Value);
            }
        }

        private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            bool value, value2;

            if (permisosDatos == null || permisosDatos.Count != permisos.Length)
            {
                Xceed.Wpf.Toolkit.MessageBox.Show("No se han podido obtener los permisos", "Error",
                    MessageBoxButton.OK, MessageBoxImage.Error);
                btBorrar.IsEnabled = btEditar.IsEnabled = btGuardar.IsEnabled = tbDNI.IsEnabled = tbNombre.IsEnabled =
                    tbApellido1.IsEnabled = tbApellido2.IsEnabled = tbNombreEmpresa.IsEnabled = tbDireccion.IsEnabled =
                    tbPoblacion.IsEnabled = tbCpostal.IsEnabled = tbProvincia.IsEnabled = cbPais.IsEnabled =
                    tbTelefono.IsEnabled = tbMail.IsEnabled = false;
            }
            else
            {
                if (cliente == null) // Solo crear
                {
                    permisosDatos.TryGetValue(TiposRoles.CREAR_CLIENTE, out value);
                    if (value == false)
                       btGuardar.IsEnabled = tbDNI.IsEnabled = tbNombre.IsEnabled =
                        tbApellido1.IsEnabled = tbApellido2.IsEnabled = tbNombreEmpresa.IsEnabled = tbDireccion.IsEnabled =
                        tbPoblacion.IsEnabled = tbCpostal.IsEnabled = tbProvincia.IsEnabled = cbPais.IsEnabled =
                        tbTelefono.IsEnabled = tbMail.IsEnabled = false;
                }
                else // Modificar y borrar
                {
                    permisosDatos.TryGetValue(TiposRoles.MODIFICAR_DATOS_CLIENTE, out value);
                    permisosDatos.TryGetValue(TiposRoles.ELIMINAR_CLIENTE, out value2);

                    if (value2 == false && value == false)
                    {
                        btEditar.IsEnabled = btBorrar.IsEnabled = btGuardar.IsEnabled = tbDNI.IsEnabled = tbNombre.IsEnabled =
                        tbApellido1.IsEnabled = tbApellido2.IsEnabled = tbNombreEmpresa.IsEnabled = tbDireccion.IsEnabled =
                        tbPoblacion.IsEnabled = tbCpostal.IsEnabled = tbProvincia.IsEnabled = cbPais.IsEnabled =
                        tbTelefono.IsEnabled = tbMail.IsEnabled = false;
                    }
                    else
                    {
                        if (value == false)
                        {
                            btGuardar.IsEnabled = tbDNI.IsEnabled = tbNombre.IsEnabled =
                            tbApellido1.IsEnabled = tbApellido2.IsEnabled = tbNombreEmpresa.IsEnabled = tbDireccion.IsEnabled =
                            tbPoblacion.IsEnabled = tbCpostal.IsEnabled = tbProvincia.IsEnabled = cbPais.IsEnabled =
                            tbTelefono.IsEnabled = tbMail.IsEnabled = false;
                        }
                        if (value2 == false)
                            btBorrar.IsEnabled = false;
                    }
                }
            }
            _busyIndicator.IsBusy = false;
        }

        private void Close()
        {
            ((DocumentContent)this.Parent).Close();
        }

        public ClienteCAD ClienteCAD
        {
            get { return cCAD == null ? new ClienteCAD() : cCAD; }
            set { cCAD = value; }
        }

        public void AddEventHandler()
        {
            ((DocumentContent)this.Parent).Closing += ClosingDocument;
        }

        private bool HasChanges()
        {
            if (!originalDNICIF.Equals(tbDNI.Text) || !originalNombre.Equals(tbNombre.Text)
                || !originalAp1.Equals(tbApellido1.Text) || !originalAp2.Equals(tbApellido2.Text)
                || !originalNombreEmpresa.Equals(tbNombreEmpresa.Text) || !originalDireccion.Equals(tbDireccion.Text)
                || !originalTelefono.Equals(tbTelefono.Text) || !originalMail.Equals(tbMail.Text)
                || !originalProvincia.Equals(tbProvincia.Text) || !originalPoblacion.Equals(tbPoblacion.Text)
                || !originalCPostal.Equals(tbCpostal.Text))
                return true;

            // Como es más peliagudo, se hace la comprobación aparte
            if (cbPais.ItemsSource != null && (originalPais != cbPais.SelectedIndex))
                return true;

            return false;
        }

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            if (!loaded)
            {
                brushNormal = tbNombre.BorderBrush;
                tbDNI.Focus();
                if (cliente == null)
                {
                    btBorrar.Visibility = Visibility.Collapsed;
                    gridEditar.Visibility = Visibility.Collapsed;
                    lbObras.Visibility = Visibility.Collapsed;
                    dgObras.Visibility = Visibility.Collapsed;
                    originalDireccion = originalNombre = originalAp1 = originalAp2 = originalNombreEmpresa =
                        originalDireccion = originalTelefono = originalMail = originalDNICIF =
                        originalPoblacion = originalProvincia = originalCPostal = string.Empty;
                    originalPais = -1;
                   
                }
                else
                {
                    gridBotones.Visibility = Visibility.Collapsed;
                    tbDNI.IsEnabled = tbNombre.IsEnabled = tbNombreEmpresa.IsEnabled =
                        tbApellido1.IsEnabled = tbApellido2.IsEnabled = tbDireccion.IsEnabled = 
                        tbMail.IsEnabled = tbTelefono.IsEnabled = tbProvincia.IsEnabled = 
                        tbPoblacion.IsEnabled = tbCpostal.IsEnabled = cbPais.IsEnabled = false;

                    originalNombre = tbNombre.Text = cliente.Nombre;
                    originalDNICIF = tbDNI.Text = cliente.DniCif;
                    originalAp1 = tbApellido1.Text = cliente.Apellido1;
                    originalAp2 = tbApellido2.Text = cliente.Apellido2;
                    originalNombreEmpresa = tbNombreEmpresa.Text = 
                        cliente.NombreEmpresa == null ? string.Empty : cliente.NombreEmpresa;
                    originalMail = tbMail.Text = cliente.Email;
                    originalDireccion = tbDireccion.Text = cliente.Direccion;
                    originalTelefono = tbTelefono.Text = cliente.Telefono;
                    originalPoblacion = tbPoblacion.Text = cliente.Poblacion;
                    originalCPostal = tbCpostal.Text = cliente.CodigoPostal;
                    originalProvincia = tbProvincia.Text = cliente.Provincia;

                    cbPais.DisplayMemberPath = "Espanol";
                    cbPais.SelectedValuePath = "Id";
                    cbPais.Items.Add(new { cliente.Paises.Id, cliente.Paises.Espanol });
                    cbPais.SelectedIndex = cbPais.Items.Count - 1;

                    // Carga las obras de ese cliente
                    dgObras.ItemsSource = cliente.ObrasEnPropiedad;
                }

                success = false;

                if (!worker.IsBusy)
                {
                    _busyIndicator.IsBusy = true;
                    worker.RunWorkerAsync();
                }

                loaded = true;
            }
        }

        private void btEditar_Click(object sender, RoutedEventArgs e)
        {
            gridEditar.Visibility = Visibility.Hidden;
            gridBotones.Visibility = Visibility.Visible;
            tbDNI.IsEnabled = tbNombre.IsEnabled = tbNombreEmpresa.IsEnabled =
                tbApellido1.IsEnabled = tbApellido2.IsEnabled = tbDireccion.IsEnabled =
                tbMail.IsEnabled = tbTelefono.IsEnabled = tbCpostal.IsEnabled =
                tbProvincia.IsEnabled = tbPoblacion.IsEnabled = cbPais.IsEnabled = true;
        }

        private void btCancelar_Click(object sender, RoutedEventArgs e)
        {
            Close();
        }

        private DocumentContent FindDocumentContent(Type t)
        {
            DockingManager manager;

            manager = ((DocumentContent)this.Parent).Manager;
            // Buscamos si hay abierta una instancia del documento a abrir
            foreach (AvalonDock.DocumentContent doc in manager.Documents)
            {
                if (doc.Content.GetType() == t)
                    return doc;
            }
            return null;
        }

        private void btBorrar_Click(object sender, RoutedEventArgs e)
        {
            ucClientes clientes;
            DocumentContent padre;
            int uId;

            if (Xceed.Wpf.Toolkit.MessageBox.Show("¿Está seguro de que desea borrar este cliente?\nEsta acción no se puede deshacer",
                    "Borrar obra", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
            {
                uId = Convert.ToInt32(Utilities.FindUsuarioData(GetContainerWindow().GetType(), this, "Id"));
                if (success = ClienteCAD.BorrarCliente(cliente))
                {
                    auditoria.Mensaje(new object[] { cliente.Id }, TiposAuditoria.Ordinal(TiposAuditoria.TIPO_AUDITORIA.BORRAR_CLIENTE),
                        uId);
                    System.Threading.Thread.Sleep(1000);
                    Xceed.Wpf.Toolkit.MessageBox.Show("Cliente borrado con éxito",
                        "Cliente borrado", MessageBoxButton.OK, MessageBoxImage.Information);
                    if ((padre = (DocumentContent)(FindDocumentContent(typeof(ucClientes)))) != null)
                    {
                        clientes = (ucClientes)(padre.Content);
                        clientes.ActualizarDataGrid();
                        Close();
                    }
                }
                else
                {
                    auditoria.Mensaje(new object[] { cliente.Id }, TiposAuditoria.Ordinal(TiposAuditoria.TIPO_AUDITORIA.ERROR_BORRAR_CLIENTE),
                        uId);
                    System.Threading.Thread.Sleep(1000);
                    Xceed.Wpf.Toolkit.MessageBox.Show("No se ha podido borrar el cliente",
                        "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

            }
            else
                return;
        }

        private bool AreCamposCorrectos()
        {
            bool salida = true;
            ToolTip t = new ToolTip();

            if (string.IsNullOrWhiteSpace(tbDNI.Text) || string.IsNullOrWhiteSpace(tbNombre.Text) ||
                string.IsNullOrWhiteSpace(tbApellido1.Text) || string.IsNullOrWhiteSpace(tbApellido2.Text) ||
                string.IsNullOrWhiteSpace(tbDireccion.Text) || string.IsNullOrWhiteSpace(tbTelefono.Text) ||
                string.IsNullOrWhiteSpace(tbPoblacion.Text) || string.IsNullOrWhiteSpace(tbProvincia.Text) ||
                string.IsNullOrWhiteSpace(tbCpostal.Text) || (cbPais.ItemsSource == null || cbPais.SelectedIndex == -1))
            {
                t.Content = "Este campo no puede estar vacío";

                if (string.IsNullOrWhiteSpace(tbDNI.Text))
                {
                    tbDNI.BorderBrush = new SolidColorBrush(Colors.Red);
                    tbDNI.ToolTip = t;
                }
                if (string.IsNullOrWhiteSpace(tbNombre.Text))
                {
                    tbNombre.BorderBrush = new SolidColorBrush(Colors.Red);
                    tbNombre.ToolTip = t;
                }
                if (string.IsNullOrWhiteSpace(tbApellido1.Text))
                {
                    tbApellido1.BorderBrush = new SolidColorBrush(Colors.Red);
                    tbApellido1.ToolTip = t;
                }
                if (string.IsNullOrWhiteSpace(tbApellido2.Text))
                {
                    tbApellido2.BorderBrush = new SolidColorBrush(Colors.Red);
                    tbApellido2.ToolTip = t;
                }
                if (string.IsNullOrWhiteSpace(tbDireccion.Text))
                {
                    tbDireccion.BorderBrush = new SolidColorBrush(Colors.Red);
                    tbDireccion.ToolTip = t;
                }
                if (string.IsNullOrWhiteSpace(tbTelefono.Text))
                {
                    tbTelefono.BorderBrush = new SolidColorBrush(Colors.Red);
                    tbTelefono.ToolTip = t;
                }
                if (string.IsNullOrWhiteSpace(tbProvincia.Text))
                {
                    tbProvincia.BorderBrush = new SolidColorBrush(Colors.Red);
                    tbProvincia.ToolTip = t;
                }
                if (string.IsNullOrWhiteSpace(tbPoblacion.Text))
                {
                    tbPoblacion.BorderBrush = new SolidColorBrush(Colors.Red);
                    tbPoblacion.ToolTip = t;
                }
                if (string.IsNullOrWhiteSpace(tbCpostal.Text))
                {
                    tbCpostal.BorderBrush = new SolidColorBrush(Colors.Red);
                    tbCpostal.ToolTip = t;
                }
                if (cbPais.ItemsSource == null || cbPais.SelectedIndex == -1)
                {
                    cbPais.BorderBrush = new SolidColorBrush(Colors.Red);
                    cbPais.ToolTip = t;
                }

                salida = false;
            }
            else
            {
                if (!Validacion.NIF(tbDNI.Text))
                {
                    if (!Validacion.CIF(tbDNI.Text))
                    {
                        t = new ToolTip();
                        t.Content = "Formato de DNI o CIF incorrecto";
                        tbDNI.BorderBrush = new SolidColorBrush(Colors.Red);
                        tbDNI.ToolTip = t;
                        salida = false;
                    }
                    else
                    {
                        if (string.IsNullOrWhiteSpace(tbNombreEmpresa.Text))
                        {
                            t = new ToolTip();
                            t.Content = "Debes indicar un nombre de empresa";
                            tbNombreEmpresa.BorderBrush = new SolidColorBrush(Colors.Red);
                            tbNombreEmpresa.ToolTip = t;
                            salida = false;
                        }
                    }
                }
                else
                {
                    if (!string.IsNullOrWhiteSpace(tbNombreEmpresa.Text))
                    {
                        t = new ToolTip();
                        t.Content = "No se puede asignar una empresa a un particular";
                        tbNombreEmpresa.BorderBrush = new SolidColorBrush(Colors.Red);
                        tbNombreEmpresa.ToolTip = t;
                        salida = false;
                    }
                }

                if (!Validacion.Telefono(tbTelefono.Text))
                {
                    t = new ToolTip();
                    t.Content = "Formato de teléfono incorrecto";
                    tbTelefono.BorderBrush = new SolidColorBrush(Colors.Red);
                    tbTelefono.ToolTip = t;
                    salida = false;
                }

                if (!string.IsNullOrWhiteSpace(tbMail.Text) && !Validacion.Email(tbMail.Text))
                {
                    t = new ToolTip();
                    t.Content = "Formato de correo electrónico incorrecto";
                    tbMail.BorderBrush = new SolidColorBrush(Colors.Red);
                    tbMail.ToolTip = t;
                    salida = false;
                }

                // Si estás insertando un usuario, comprueba que no exista uno igual
                if (salida && cliente == null)
                {
                    // Con el NIF o CIF
                    if (ClienteCAD.GetClienteByNifCif(tbDNI.Text) != null)
                    {
                        t = new ToolTip();
                        t.Content = "Ya existe este DNI o CIF en la base de datos";
                        tbDNI.BorderBrush = new SolidColorBrush(Colors.Red);
                        tbDNI.ToolTip = t;
                        salida = false;
                    }
                }
            }

            return salida;
        }

        private UserWindow GetContainerWindow()
        {
            DockingManager manager;
            manager = ((DocumentContent)(this.Parent)).Manager;
            return (UserWindow)(((Grid)(manager.Parent)).Parent);
        }

        private void btGuardar_Click(object sender, RoutedEventArgs e)
        {
            Cliente c;
            ucClientes clientes;
            DocumentContent padre;
            int uId;
            List<string> camposModificados;

            uId = Convert.ToInt32(Utilities.FindUsuarioData(GetContainerWindow().GetType(), this, "Id"));
            if (cliente == null) // Nuevo cliente
            {
                if (AreCamposCorrectos())
                {
                    c = new Cliente();
                    c.DniCif = tbDNI.Text;
                    c.Nombre = tbNombre.Text;
                    c.Apellido1 = tbApellido1.Text;
                    c.Apellido2 = tbApellido2.Text;
                    c.NombreEmpresa = tbNombreEmpresa.Text;
                    c.Direccion = tbDireccion.Text;
                    c.Email = tbMail.Text;
                    c.Telefono = tbTelefono.Text;
                    c.Activo = true;
                    c.UsuarioAlta = GetContainerWindow().Usuario.Id;
                    c.Pais = Convert.ToInt32(cbPais.SelectedValue);
                    c.Provincia = tbProvincia.Text;
                    c.Poblacion = tbPoblacion.Text;
                    c.CodigoPostal = tbCpostal.Text;

                    if (success = ClienteCAD.GuardarNuevoCliente(c))
                    {
                        Xceed.Wpf.Toolkit.MessageBox.Show("Cliente creado con éxito",
                            "Cliente creado", MessageBoxButton.OK, MessageBoxImage.Information);
                        auditoria.Mensaje(new object[] { c.Id }, TiposAuditoria.Ordinal(TiposAuditoria.TIPO_AUDITORIA.CREAR_CLIENTE),
                            uId);
                        System.Threading.Thread.Sleep(1000);
                        if ((padre = (DocumentContent)(FindDocumentContent(typeof(ucClientes)))) != null)
                        {
                            clientes = (ucClientes)(padre.Content);
                            clientes.ActualizarDataGrid();
                            Close();
                        }
                    }
                    else
                    {
                        Xceed.Wpf.Toolkit.MessageBox.Show("No se ha podido crear el cliente",
                            "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        auditoria.Mensaje(new object[] { c.Id }, TiposAuditoria.Ordinal(TiposAuditoria.TIPO_AUDITORIA.ERROR_CREAR_CLIENTE),
                            uId);
                        System.Threading.Thread.Sleep(1000);
                        return;
                    }
                }
            }
            else // Modificación de cliente
            {
                if (HasChanges())
                {
                    if (AreCamposCorrectos())
                    {
                        camposModificados = new List<string>();
                        if (cliente.DniCif.Equals(tbDNI.Text) == false)
                            camposModificados.Add("DNI/CIF");
                        if (cliente.Nombre.Equals(tbNombre.Text) == false)
                            camposModificados.Add("nombre");
                        if (cliente.Apellido1.Equals(tbApellido1.Text) == false)
                            camposModificados.Add("primer apellido");
                        if (cliente.Apellido2.Equals(tbApellido2.Text) == false)
                            camposModificados.Add("segundo apellido");
                        if (cliente.NombreEmpresa != null && cliente.NombreEmpresa.Equals(tbNombreEmpresa.Text) == false)
                            camposModificados.Add("nombre de empresa");
                        if (cliente.Direccion.Equals(tbDireccion.Text) == false)
                            camposModificados.Add("dirección");
                        if (cliente.Email.Equals(tbMail.Text) == false)
                            camposModificados.Add("e-mail");
                        if (cliente.Telefono.Equals(tbTelefono.Text) == false)
                            camposModificados.Add("teléfono");
                        if (cliente.Pais != Convert.ToInt32(cbPais.SelectedValue))
                            camposModificados.Add("país");
                        if (cliente.Provincia.Equals(tbProvincia.Text) == false)
                            camposModificados.Add("provincia");
                        if (cliente.Poblacion.Equals(tbPoblacion.Text) == false)
                            camposModificados.Add("población");
                        if (cliente.CodigoPostal.Equals(tbCpostal.Text) == false)
                            camposModificados.Add("código postal");

                        cliente.DniCif = tbDNI.Text;
                        cliente.Nombre = tbNombre.Text;
                        cliente.Apellido1 = tbApellido1.Text;
                        cliente.Apellido2 = tbApellido2.Text;
                        cliente.NombreEmpresa = tbNombreEmpresa.Text;
                        cliente.Direccion = tbDireccion.Text;
                        cliente.Email = tbMail.Text;
                        cliente.Telefono = tbTelefono.Text;
                        cliente.Pais = Convert.ToInt32(cbPais.SelectedValue);
                        cliente.Provincia = tbProvincia.Text;
                        cliente.Poblacion = tbPoblacion.Text;
                        cliente.CodigoPostal = tbCpostal.Text;

                        if (success = ClienteCAD.GuardarCambios())
                        {
                            Xceed.Wpf.Toolkit.MessageBox.Show("Cliente modificado con éxito",
                                    "Cliente modificado", MessageBoxButton.OK, MessageBoxImage.Information);
                            auditoria.Mensaje(new object[] { Utilities.ListToString(camposModificados, ", "), cliente.Id }, TiposAuditoria.Ordinal(TiposAuditoria.TIPO_AUDITORIA.MODIFICAR_DATOS_CLIENTE),
                                uId);
                            System.Threading.Thread.Sleep(1000);
                            if ((padre = (DocumentContent)(FindDocumentContent(typeof(ucClientes)))) != null)
                            {
                                clientes = (ucClientes)(padre.Content);
                                clientes.ActualizarDataGrid();
                                Close();
                            }
                        }
                        else
                        {
                            Xceed.Wpf.Toolkit.MessageBox.Show("No se ha podido modificar el cliente",
                                "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                            auditoria.Mensaje(new object[] { Utilities.ListToString(camposModificados, ", "), cliente.Id }, TiposAuditoria.Ordinal(TiposAuditoria.TIPO_AUDITORIA.ERROR_MODIFICAR_DATOS_CLIENTE),
                                uId);
                            System.Threading.Thread.Sleep(1000);
                            return;
                        }
                    }
                }
                else
                {
                    Xceed.Wpf.Toolkit.MessageBox.Show("No se ha realizado ningún cambio",
                        "Salir sin cambios", MessageBoxButton.OK, MessageBoxImage.Information);
                    Close();
                }
            }
        }

        private void tbDNI_GotFocus(object sender, RoutedEventArgs e)
        {
            tbDNI.BorderBrush = tbNombre.BorderBrush = tbApellido1.BorderBrush =
                tbApellido2.BorderBrush = tbNombreEmpresa.BorderBrush = tbDireccion.BorderBrush =
                tbMail.BorderBrush = tbTelefono.BorderBrush = tbProvincia.BorderBrush = tbPoblacion.BorderBrush =
                tbCpostal.BorderBrush = cbPais.BorderBrush = brushNormal;
            tbDNI.ToolTip = tbNombre.ToolTip = tbApellido1.ToolTip =
                tbApellido2.ToolTip = tbNombreEmpresa.ToolTip = tbDireccion.ToolTip =
                tbMail.ToolTip = tbTelefono.ToolTip = tbCpostal.ToolTip = tbPoblacion.ToolTip =
                tbProvincia.ToolTip = cbPais.ToolTip  = null;
        }

        private void cbPais_GotFocus(object sender, RoutedEventArgs e)
        {
            string country;

            tbDNI_GotFocus(sender, e);
            if (cbPais.ItemsSource == null)
            {
                if (cliente == null)
                {
                    cbPais.ItemsSource = new PaisCAD().GetPaisIdSpanish(); ;
                    cbPais.DisplayMemberPath = "Espanol";
                    cbPais.SelectedValuePath = "Id";
                    cbPais.SelectedIndex = -1;
                }
                else
                {
                    country = cbPais.SelectedValue.ToString();
                    cbPais.Items.Clear();
                    cbPais.ItemsSource = new PaisCAD().GetPaisIdSpanish(); ;
                    cbPais.DisplayMemberPath = "Espanol";
                    cbPais.SelectedValuePath = "Id";

                    for (int i = cbPais.Items.Count - 1; i >= 0; i--)
                    {
                        originalPais = cbPais.SelectedIndex = i;
                        if (cbPais.SelectedValue.ToString().Equals(country))
                            break;
                    }
                }
            }
        }
    }
}
